package com.wlt.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wlt.pojo.Role;
import com.wlt.result.BaseResult;
import com.wlt.service.RoleService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 后台角色
 */
@RestController
@RequestMapping("/role")
public class RoleController
{
    @DubboReference
    private RoleService roleService;
    
    /**
     * 新增角色
     * @param role  角色对象
     * @return      执行结果
     */
    @PostMapping("/add")
    public BaseResult add(@RequestBody Role role)
    {
        roleService.add(role);
        
        return BaseResult.success();
    }
    
    /**
     * 修改角色
     * @param role  角色对象
     * @return      执行结果
     */
    @PutMapping ("/update")
    public BaseResult update (@RequestBody Role role)
    {
        roleService.update(role);
        
        return BaseResult.success();
    }
    
    /**
     * 删除角色
     * @param rid   角色id
     * @return      删除结果
     */
    @DeleteMapping ("/delete")
    public BaseResult delete (Long rid)
    {
        roleService.delete(rid);
        
        return BaseResult.success();
    }
    
    /**
     * 根据id查询角色
     * @param rid   角色id
     * @return      查询结果
     */
    @GetMapping ("/findById")
    public BaseResult findById (Long rid)
    {
        Role role = roleService.findById(rid);
        
        return BaseResult.success(role);
    }
    
    /**
     * 分页查询角色
     * @param page  页码
     * @param size  每页展示条数
     * @return      查询结果
     */
    @GetMapping ("/search")
    @PreAuthorize ("hasAneyAuthority('/role/search')")
    public BaseResult<Page<Role>> search (int page, int size)
    {
        Page<Role> rolePage = roleService.search(page, size);
        
        return BaseResult.success(rolePage);
    }
    
    /**
     * 查询所有角色
     * @return  查询结果
     */
    @GetMapping ("/findAll")
    public BaseResult<List<Role>> findAll ()
    {
        List<Role> roles = roleService.findAll();
        
        return BaseResult.success(roles);
    }
    
    /**
     * 修改角色权限
     * @param rid   角色id
     * @param pids  权限id
     * @return      修改结果
     */
    @PutMapping("/updatePermissionToRole")
    public BaseResult<List<Role>> updatePermissionToRole(Long rid, Long[] pids)
    {
        roleService.updatePermissionToRole(rid, pids);
        
        return BaseResult.success();
    }
}
